package com.voxel.sense.infomsg.utils;

import java.io.File;
import java.io.IOException;

public class FileUtils {
  /**
   * 判断文件是否存在
   *
   * @param file 文件
   * @return {@code true}: 存在<br>{@code false}: 不存在
   */
  public static boolean isFileExists(final File file) {
    return file != null && file.exists();
  }

  /**
   * 判断文件是否存在，不存在则判断是否创建成功
   *
   * @param file 文件
   * @return {@code true}: 存在或创建成功<br>{@code false}: 不存在或创建失败
   */
  public static boolean createOrExistsFile(final File file) {
    if (file == null) return false;
    // 如果存在，是文件则返回 true，是目录则返回 false
    if (file.exists()) return file.isFile();
    if (!createOrExistsDir(file.getParentFile())) return false;
    try {
      return file.createNewFile();
    } catch (IOException e) {
      e.printStackTrace();
      return false;
    }
  }

  /**
   * 判断目录是否存在，不存在则判断是否创建成功
   *
   * @param file 文件
   * @return {@code true}: 存在或创建成功<br>{@code false}: 不存在或创建失败
   */
  public static boolean createOrExistsDir(final File file) {
    // 如果存在，是目录则返回 true，是文件则返回 false，不存在则返回是否创建成功
    return file != null && (file.exists() ? file.isDirectory() : file.mkdirs());
  }

  /**
   * 判断目录是否存在，不存在则判断是否创建成功
   *
   * @param dirPath 目录路径
   * @return {@code true}: 存在或创建成功<br>{@code false}: 不存在或创建失败
   */
  public static boolean createOrExistsDir(final String dirPath) {
    return createOrExistsDir(getFileByPath(dirPath));
  }

  /**
   * 根据文件路径获取文件
   *
   * @param filePath 文件路径
   * @return 文件
   */
  public static File getFileByPath(final String filePath) {
    return isSpace(filePath) ? null : new File(filePath);
  }

  private static boolean isSpace(final String s) {
    if (s == null) return true;
    for (int i = 0, len = s.length(); i < len; ++i) {
      if (!Character.isWhitespace(s.charAt(i))) {
        return false;
      }
    }
    return true;
  }
}
